// 文件路径: dbms/parser/ast/ExplainNode.java
package com.dbms.parser.ast;

import com.dbms.common.Constants;
import com.dbms.common.Position;

/**
 * ExplainNode (解释节点) 代表了 `EXPLAIN` 或 `EXPLAIN ANALYZE` 语句的抽象语法树 (AST) 结构。
 * 它封装了需要被解释的真实SQL语句，并标记了是否需要进行性能分析（ANALYZE）。
 */
public class ExplainNode extends StatementNode {

    /**
     * 被 EXPLAIN 的真实语句节点 (例如，一个 SelectNode 或 UpdateNode)。
     */
    private final StatementNode statement;
    /**
     * 一个布尔标志，如果为 true，表示是 `EXPLAIN ANALYZE`；如果为 false，表示是 `EXPLAIN`。
     */
    private final boolean isAnalyze;

    public ExplainNode(Position position, StatementNode statement, boolean isAnalyze) {
        super(position);
        this.statement = statement;
        this.isAnalyze = isAnalyze;
    }

    /**
     * 返回语句的类型标识。
     * @return "Explain" 常量
     */
    @Override
    public String getStatementType() {
        return Constants.STATEMENT_EXPLAIN;
    }

    /**
     * 获取被解释的内部语句节点。
     * @return 内部语句的 AST 节点
     */
    public StatementNode getStatement() {
        return statement;
    }

    /**
     * 检查是否为 ANALYZE 模式。
     * @return 如果是 `EXPLAIN ANALYZE` 则返回 true，否则返回 false
     */
    public boolean isAnalyze() {
        return isAnalyze;
    }
}